
package com.jf.cloud.supplier.service;

import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.supplier.bo.mongo.MongoSupplierWalletLogBO;
import com.jf.cloud.supplier.dto.SupplierWalletLogSearchDTO;
import com.jf.cloud.supplier.vo.SupplierWalletLogExcelVO;
import com.jf.cloud.supplier.vo.SupplierWalletVO;

import java.util.List;

/**
 * 供应商钱包记录
 *
 * @author zz
 * @date 2022-03-14 17:04:32
 */
public interface SupplierWalletLogService {

    /**
     * 分页获取商家钱包记录列表
     * @param pageDTO 分页参数
     * @param supplierWalletLogSearchDTO 钱包日志搜索参数
     * @return 商家钱包记录列表分页数据
     */
    PageVO<MongoSupplierWalletLogBO> pageByParam(PageDTO pageDTO, SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 保存商家钱包记录
     * 这里需要有钱包id传进来
     * @param supplierWalletLogBOList 商家钱包记录
     */
    void saveMongoBatch(List<MongoSupplierWalletLogBO> supplierWalletLogBOList);

    /**
     * 查询所有店铺的日志
     * @param pageDTO 分页
     * @param supplierWalletLogSearchDTO 查询参数
     * @return 所有店铺的日志
     */
    PageVO<MongoSupplierWalletLogBO> pageAllSupplier(PageDTO pageDTO, SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 计算供应商从订单获取金额的数量
     *
     * @param orderId                订单id
     * @param shopWalletChangeReason 钱包改变原因
     * @return 数量
     */
    long countInAmountByOrderId(Long orderId, Integer shopWalletChangeReason);

    /**
     * 计算供应商从退款失去金额的数量
     *
     * @param refundId               退款编号
     * @param shopWalletChangeReason 钱包改变原因
     * @return 数量
     */
    long countOutAmountByRefundId(Long refundId, Integer shopWalletChangeReason);

    /**
     * 根据订单号查询供应商钱包日志
     * @param supplierWalletLogSearchDTO
     * @return
     */
    List<MongoSupplierWalletLogBO> listByParam(SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 根据需要分片的数量获取供应商id列表
     * @param needZoneNum
     * @return
     */
    List<Long> listNeedZoneSupplierIds(int needZoneNum);

    /**
     * 根据时间和供应商名称获取供应商钱包信息
     * @param supplierWalletLogSearchDTO
     * @return
     */
    SupplierWalletVO getSupplierWalletByTime(SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 分页获取供应商钱包信息
     * @param pageDTO
     * @param supplierWalletLogSearchDTO
     * @return
     */
    PageVO<SupplierWalletVO> pageSupplierWalletByTime(PageDTO pageDTO, SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 获取导出列表
     * @param supplierWalletLogSearchDTO
     * @return
     */
    List<SupplierWalletLogExcelVO> listSupplierWalletLogExcel(SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);
}
